package org.bibpessoal.daos;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

import org.bibpessoal.entidades.Amizade;
import org.bibpessoal.entidades.Usuario;
import org.bibpessoal.exceptions.UsuarioInvalidoException;

@Stateless
public class UsuarioDAOImpl implements UsuarioDAO {
	@PersistenceContext(unitName="BibPessoalPU")
	private EntityManager em;

	public UsuarioDAOImpl() {
		super();
	}

	@Override
	public Usuario autenticar(String login, String senha)
			throws UsuarioInvalidoException {
		Query query = em.createNamedQuery("autenticarUsuario");
		query.setParameter("login", login);
		query.setParameter("senha", senha);
		Usuario usr;
		try {
			usr = (Usuario) query.getSingleResult();
		} catch (PersistenceException pe) {
			throw new UsuarioInvalidoException(pe.getMessage());
		}
		if (usr == null) {
			throw new UsuarioInvalidoException("Login e senha inválidos!");
		}
		return usr;
	}

	@Override
	public boolean cadastrarUsuario(Usuario usuario)
			throws UsuarioInvalidoException {
		if(usuario != null){
			if(usuario.getNome() == null || usuario.getEmail() == null ||
					usuario.getLogin() == null || usuario.getSenha() == null){
				throw new UsuarioInvalidoException("Todos os Campos devem ser preenchidos!");
			}else{
				em.persist(usuario);
				return true;
			}
		}
		return false;
	}
	
	@Override
	public List<Usuario> listarOutrosUsuarios(int id){
		Query query = em.createQuery("SELECT u FROM Usuario u WHERE NOT u.id = :id");
		query.setParameter("id", id);
		@SuppressWarnings("unchecked")
		List<Usuario> usuarios = query.getResultList();		
		return usuarios;
	}
	
	@Override
	public boolean solicitarAmizade(Amizade amizade) {
		em.persist(amizade);
		return true;
	}

	@Override
	public boolean responderSolicitacao(Amizade amizade) {
		em.merge(amizade);
		return false;
	}

}
